cssparser: Add gtk_css_parser_try_delim()
authorBenjamin Otte <otte@redhat.com>
Fri, 5 Apr 2019 00:57:14 +0000 (02:57 +0200)
committerBenjamin Otte <otte@redhat.com>
Fri, 12 Apr 2019 17:34:28 +0000 (19:34 +0200)
For parsing single code point delimiters. Also port calc() to use this.

gtk/gtkcsscalcvalue.c
gtk/gtkcssparser.c
gtk/gtkcssparserprivate.h
gtk/gtkcssshorthandpropertyimpl.c

index f9279e76498232e2260487bdd074b5bd22ec1d09..129dd93c52f42f3d58aa12f1858f4497e31dab97 100644 (file)
@@ -366,7 +366,7 @@ gtk_css_calc_value_parse_product (GtkCssParser           *parser,
       if (actual_flags != GTK_CSS_PARSE_NUMBER && !is_number (result))
         actual_flags = GTK_CSS_PARSE_NUMBER;
 
-      if (_gtk_css_parser_try (parser, "*", TRUE))
+      if (gtk_css_parser_try_delim (parser, '*'))
         {
           value = gtk_css_calc_value_parse_product (parser, actual_flags);
           if (value == NULL)
@@ -379,7 +379,7 @@ gtk_css_calc_value_parse_product (GtkCssParser           *parser,
           _gtk_css_value_unref (result);
           result = temp;
         }
-      else if (_gtk_css_parser_try (parser, "/", TRUE))
+      else if (gtk_css_parser_try_delim (parser, '/'))
         {
           value = gtk_css_calc_value_parse_product (parser, GTK_CSS_PARSE_NUMBER);
           if (value == NULL)
@@ -422,13 +422,13 @@ gtk_css_calc_value_parse_sum (GtkCssParser           *parser,
     {
       GtkCssValue *next, *temp;
 
-      if (_gtk_css_parser_try (parser, "+", TRUE))
+      if (gtk_css_parser_try_delim (parser, '+'))
         {
           next = gtk_css_calc_value_parse_product (parser, flags);
           if (next == NULL)
             goto fail;
         }
-      else if (_gtk_css_parser_try (parser, "-", TRUE))
+      else if (gtk_css_parser_try_delim (parser, '-'))
         {
           temp = gtk_css_calc_value_parse_product (parser, flags);
           if (temp == NULL)
index 3d0b31d03def59022624c9d05f82e499ddc66700..7599cf558c7d07765e3b9999946d34341cafd5e3 100644 (file)
@@ -320,6 +320,17 @@ gtk_css_parser_try_ident (GtkCssParser *parser,
   return TRUE;
 }
 
+gboolean
+gtk_css_parser_try_delim (GtkCssParser *parser,
+                          gunichar      delim)
+{
+  if (*parser->data != delim)
+    return FALSE;
+  parser->data += 1;
+  _gtk_css_parser_skip_whitespace (parser);
+  return TRUE;
+}
+
 gboolean
 gtk_css_parser_try_token (GtkCssParser    *parser,
                           GtkCssTokenType  type)
index 60f2d544d9028efff16f4f94879a070df7492442..5354f7a0f6b29dda97d996a14f855ddc4aeedd5c 100644 (file)
@@ -79,6 +79,8 @@ gboolean        gtk_css_parser_has_function       (GtkCssParser          *parser
  */
 gboolean        gtk_css_parser_try_ident          (GtkCssParser          *parser,
                                                    const char            *ident);
+gboolean        gtk_css_parser_try_delim          (GtkCssParser          *parser,
+                                                   gunichar               delim);
 gboolean        gtk_css_parser_try_at_keyword     (GtkCssParser          *parser,
                                                    const char            *keyword);
 gboolean        gtk_css_parser_try_token          (GtkCssParser          *parser,
index 0f14bf952472bd8c6e39ef0bf76cf25e89175d12..95bc8b6dc19df31548ffdae1019712211170a654 100644 (file)
@@ -155,7 +155,7 @@ parse_border_radius (GtkCssShorthandProperty  *shorthand,
   for (; i < 4; i++)
     x[i] = _gtk_css_value_ref (x[(i - 1) >> 1]);
 
-  if (_gtk_css_parser_try (parser, "/", TRUE))
+  if (gtk_css_parser_try_delim (parser, '/'))
     {
       for (i = 0; i < 4; i++)
         {
@@ -293,7 +293,7 @@ parse_border_image (GtkCssShorthandProperty  *shorthand,
           if (values[1] == NULL)
             return FALSE;
 
-          if (_gtk_css_parser_try (parser, "/", TRUE))
+          if (gtk_css_parser_try_delim (parser, '/'))
             {
               values[2] = _gtk_css_border_value_parse (parser,
                                                        GTK_CSS_PARSE_PERCENT
@@ -529,7 +529,7 @@ parse_one_background (GtkCssShorthandProperty  *shorthand,
           values[1] = value;
           value = NULL;
 
-          if (_gtk_css_parser_try (parser, "/", TRUE) &&
+          if (gtk_css_parser_try_delim (parser, '/') &&
               (value = _gtk_css_bg_size_value_parse (parser)))
             {
               values[2] = value;